import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Observable;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.border.EmptyBorder;
import java.awt.List;

/**
 * @author
 * 
 */
public class VueSaisieParution extends Vue {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private Periodique _periodique;
	private Parution _parution;
	private JButton buttonAjouterParution;
	private JButton buttonAnnuler;
	private JButton buttonSelecPerio;
	private JButton buttonSelecParu;
	private JButton buttonTerm;
	private List listPeriodique;
	private List listParution;
	private JButton buttonAjouterArticle;
	
	
	public VueSaisieParution(Controleur controleur) {
		super(controleur);
		setTitle("Enregistrement d'une parution\n");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 440, 585);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		buttonAjouterParution = new JButton("Ajouter Parution");
		buttonAjouterParution.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (_parution == null) {
					_parution = new Parution(1, _periodique);					
				}				
				_periodique.ajouterParution(_periodique.getNbParutions()+1);
				listParution();			
				
			}
		});
		
		buttonAjouterArticle = new JButton("Ajouter Article");
		buttonAjouterArticle.setBounds(247, 421, 133, 25);
		contentPane.add(buttonAjouterArticle);
		buttonAjouterArticle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {				
				getControleur().saisirArticle(_parution);				
			}
		});
		
		buttonAjouterParution.setBounds(133, 512, 156, 25);
		contentPane.add(buttonAjouterParution);

		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueSaisieParution.this);
			}
		}); 
		
		
		buttonAnnuler.setBounds(12, 512, 107, 25);
		contentPane.add(buttonAnnuler);

		JLabel lblPeriodique = new JLabel("Periodique");
		lblPeriodique.setBounds(12, 10, 77, 14);
		contentPane.add(lblPeriodique);

		buttonSelecPerio = new JButton("Selectionner");
		buttonSelecPerio.setBounds(247, 114, 121, 23);
		contentPane.add(buttonSelecPerio);
		buttonSelecPerio.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				_periodique = getControleur().periodiqueSelec(listPeriodique);
				setEtat(Vue.inter1);
				listParution();
			}
		});

		listPeriodique = new List();
		listPeriodique.setEnabled(true);
		listPeriodique.setBounds(133, 10, 235, 97);
		contentPane.add(listPeriodique);

		JLabel lblParution = new JLabel("Parution");
		lblParution.setBounds(12, 164, 61, 15);
		contentPane.add(lblParution);

		listPeriodique();

		listParution = new List();
		listParution.setBounds(113, 164, 255, 252);
		contentPane.add(listParution);

		buttonTerm = new JButton("Terminer");
		buttonTerm.setBounds(301, 513, 107, 23);
		contentPane.add(buttonTerm);
		buttonTerm.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueSaisieParution.this);
			}
		});

		buttonSelecParu = new JButton("Selectionner");
		buttonSelecParu.setBounds(113, 422, 121, 23);
		contentPane.add(buttonSelecParu);		
		buttonSelecParu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {				
				_parution = getControleur().parutionSelec(listParution,
						_periodique);
			}
		});		
	}

	public void listPeriodique() {
		HashMap<Integer, Periodique> _periodiques;
		_periodiques = getControleur().getPeriodiques();
		for (int i = 1; i <= _periodiques.size(); i++) {
			listPeriodique.add(_periodiques.get(i).getTitre());
		}
		if(_periodiques.size() == 0){
			listPeriodique.add("Aucun periodique encore enregistree");
			buttonSelecPerio.setEnabled(false);
		}		
	}

	public void listParution() {
		HashMap<Integer, Parution> _parutions;
		listParution.clear();
		if (_periodique != null) {			
			_parutions = _periodique.getEnsParution();
			for (int i = 1; i <= _parutions.size(); i++) {
				listParution.add("N°"+(_parutions.get(i).getNum()).toString());
			}
			if(_parutions.size()>0)
				buttonSelecParu.setEnabled(true);
		}	
		else{
			listParution.add("Aucune parution encore enregistree");
			buttonSelecParu.setEnabled(false);
		}		
	}

	public void setEtat(int etat) {
		switch (etat) {
		case initiale: {
			buttonAjouterParution.setEnabled(false);
			buttonAnnuler.setEnabled(true);
			buttonAjouterArticle.setEnabled(false);
			buttonSelecParu.setEnabled(false);
			break;
		}
		case inter1: {
			buttonSelecPerio.setEnabled(false);
			buttonSelecParu.setEnabled(false);
			buttonAjouterParution.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			buttonAjouterArticle.setEnabled(false);			
			break;
		}
		case finale: {
			buttonSelecPerio.setEnabled(false);
			buttonAjouterParution.setEnabled(false);
			buttonAjouterArticle.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			buttonSelecParu.setEnabled(false);
			break;
		}
		}
	}
	
	public void update(Observable observable, Object objet) {
		// maj de la vue lorque les parution sont modifier
		this.listParution();
		super.update(observable,  objet);
	} // Fin upDate

}
